package br.com.jk.cotacao;

import br.com.jk.cliente.Cliente;
import br.com.jk.empresa.Empresa;
import br.com.jk.util.StatusType.Status;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.NaturalId;

/**
 * "Teste de alteração"
 *
 * @author camilo
 */
@Entity
@Table(name = CotacaoDao.NAME_TABLE, schema = CotacaoDao.NAME_SCHEMA)
public class Cotacao implements Serializable {

  public static final String ATTRIBUTE_ID = "id";
  public static final String ATTRIBUTE_COD_COTACAO = "codCotacao";
  public static final String ATTRIBUTE_DESCRICAO = "descricao";
  public static final String ATTRIBUTE_STATUS = "status";
  public static final String ATTRIBUTE_DATA_CADASTRO = "dataCadastro";
  public static final String ATTRIBUTE_CLIENTE = "cliente";
  public static final String ATTRIBUTE_EMPRESA = "empresa";
  @Id
  @SequenceGenerator(name = CotacaoDao.NAME_SEQUENCE, sequenceName = CotacaoDao.NAME_SEQUENCE, 
          schema = CotacaoDao.NAME_SCHEMA)
  @GeneratedValue(strategy = GenerationType.AUTO, generator = CotacaoDao.NAME_SEQUENCE)
  private int id;
  @NaturalId
  @Column(name = CotacaoDao.NAME_COLUMN_COD_COTACAO)
  private String codCotacao;
  @Column(nullable = false, name = CotacaoDao.NAME_COLUMN_DESCRICAO)
  private String descricao;
  @Column(name = CotacaoDao.NAME_COLUMN_STATUS, nullable = false)
  private Status status;
  @Temporal(TemporalType.DATE)
  @Column(name = CotacaoDao.NAME_COLUMN_DATA_CADASTRO, nullable = false, updatable = false)
  private Date dataCadastro;
  @ManyToOne
  @JoinColumn(name = CotacaoDao.NAME_COLUMN_ID_EMPRESA, nullable = false)
  @ForeignKey(name = CotacaoDao.NAME_FK_COTACAO_EMPRESA)
  private Empresa empresa;
  @ManyToOne
  @JoinColumn(name = CotacaoDao.NAME_COLUMN_ID_CLIENTE, nullable = false)
  @ForeignKey(name = CotacaoDao.NAME_FK_COTACAO_CLIENTE)
  private Cliente cliente;

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getCodCotacao() {
    return codCotacao;
  }

  public void setCodCotacao(String codCotacao) {
    this.codCotacao = codCotacao;
  }

  public String getDescricao() {
    return descricao;
  }

  public void setDescricao(String descricao) {
    this.descricao = descricao;
  }

  public Status getStatus() {
    return status;
  }

  public void setStatus(Status status) {
    this.status = status;
  }

  public Date getDataCadastro() {
    return dataCadastro;
  }

  public void setDataCadastro(Date dataCadastro) {
    this.dataCadastro = dataCadastro;
  }

  public Empresa getEmpresa() {
    return empresa;
  }

  public void setEmpresa(Empresa empresa) {
    this.empresa = empresa;
  }

  public Cliente getCliente() {
    return cliente;
  }

  public void setCliente(Cliente cliente) {
    this.cliente = cliente;
  }

  @Override
  public int hashCode() {
    int hash = 7;
    hash = 67 * hash + this.id;
    hash = 67 * hash + Objects.hashCode(this.codCotacao);
    hash = 67 * hash + Objects.hashCode(this.descricao);
    hash = 67 * hash + Objects.hashCode(this.status);
    hash = 67 * hash + Objects.hashCode(this.dataCadastro);
    hash = 67 * hash + Objects.hashCode(this.empresa);
    hash = 67 * hash + Objects.hashCode(this.cliente);
    return hash;
  }

  @Override
  public boolean equals(Object obj) {
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    final Cotacao other = (Cotacao) obj;
    if (this.id != other.id) {
      return false;
    }
    if (!Objects.equals(this.codCotacao, other.codCotacao)) {
      return false;
    }
    if (!Objects.equals(this.descricao, other.descricao)) {
      return false;
    }
    if (this.status != other.status) {
      return false;
    }
    if (!Objects.equals(this.dataCadastro, other.dataCadastro)) {
      return false;
    }
    if (!Objects.equals(this.empresa, other.empresa)) {
      return false;
    }
    if (!Objects.equals(this.cliente, other.cliente)) {
      return false;
    }
    return true;
  }
}
